Computing systems and communication networks can be utilized to exchange information. In a common application, one computing system (such as a user computing device) can provide information to another computing system (such as a server computing system) for remote storage. The information may be provided with the intent to retrieve the information later using the same user computing device, or using a different user computing device.
In some scenarios, it may be desirable to confidentially maintain the information at the server. In these scenarios, the server may encrypt the information so that it is not viewable when stored persistently (e.g., on a hard disk). When a user wishes to access the information, the server may decrypt the information and send it to the user's computing device. In this way, the information exists at the server in unencrypted form only for purposes of encryption or for transmission back to the user's computing device. In some scenarios, it may also or alternatively be desirable to ensure that the data has not been tampered with, corrupted, or otherwise altered after it was initially provided to the server for storage. When a user later wishes to access the information, the server may load the data, perform authentication (e.g., compare the information to a hashed version that was generated upon initial receipt of the data, etc.). The server will then transmit the information only upon confirmation that the data has not been altered.